Appendix A: List of Assembly 
       Language Commands

Addressing Modes

- Data register direct addressing:

add.b

D0,D1

: adds the value in D0 to D1

- Address register direct addressing:

add.l

D0,A1

: adds value D0 to A1

- Address register indirect addressing:

move.l
(A1),D7
: moves contents of address to data register 
  e.g. if A1 contained $1111, and the address $1111 contains 00001234 then after the operation 00001234 would be loaded in data register 7 (D7).

move.l
D7,(A1)
: moves number value of D7 into the location pointed to by A1.

- Address register indirect with post increment:

move.l 
D7,(A1)+
: moves the long in D7 to memory location in A1 then adds 4 to A1 (because the data item was a long). With other words after the move, it increments the address register by the size of the data

move.l
(A0)+,(A1)+
: moves four bites from memory location in A0 to memory location in A1 then adds four to A0 and A1

- Address register indirect addressing with pre decrement:

move.b
D0, -(A1)
: decrement A1 by one (because it’s a byte) then move word in D0 to the address held in A1
(When bytes are moved onto the STACK then the stack pointer changes by 2 because words and longs have to be moved to even addresses)

- Address register indirect addressing with displacement:

move.w
D0,4(A1)
: move word in D0 to the memory location in A1+4.
  e.g. if D0 consists of 01 and A1 contains $1000 then 01 will be moved to address $1004

move.l
-2(A1),D0
: moves long at A1-2 to D0
(offset has to be a 16 bit word- max value=32768, min value -32767)

- Address register indirect addressing with index:

move.w
69(A1,D0.l),D1: 
moves data word from address A1+D0+69 to D1.
(displacement must fit in a byte, >-127, <128)

- Absolute short addressing:

move.w
69,D0

: moves word at ADDRESS 69 to D0

- Immediate mode addressing:

move.w
#69,D0
: move NUMBER 69 into D0

- Absolute long addressing:

move.w
D0,$69000
: moves word from D0 to address $69000

- Program counter addressing with displacement:

move.w
12(pc),D0
: move word 12 bytes from current location to D0

- Program counter addressing with index:

move.l
69(pc,D0.l),D1
: move data from 69+ current location + D0.l into D1
(displacement must fit into a byte)

- Status register addressing:

move.w
#69,sr

: move number 69 into status register
(to use status register a WORD needs to be moved)

move.b 
#0,ccr

: move 0 to condition code register

Instructions

Arithmetic Instructions:

 - ADD - Adds two operands. One operand must be a data register.  
 - ADDA - Adds an operand to an address register.  
 - ADDI - Adds a real number to an operand.   
 - ADDQ - Adds a number between zero and eight to an operand.  
 - ADDX - Allows adding of numbers of any length.  
 - SUB  - Subtracts source operand from destination operand.
 - SUBA - Subtracts the source operand from an address register.  
 - SUBI - Subtracts a real number from the destination operand.  
 - SUBQ - Subtracts a number between zero and eight from a destination operand.   
 - SUBX - Allows subtraction of numbers of any length- CLR  - Clears an operand.  
 - MULS - Multiplies destination operand by source operand using signed arithmetic. 
 - MULU - Multiplies destination operand by source operand using unsigned arithmetic
 - DIVS - Divides destination operand by source operand using signed arithmetic.   
 - DIVU - Divides destination operand by source operand using unsigned arithmetic. 
 - NEG  - Negates a number.
 - CMP  - Compares two operands and sets condition code flags.   
 - CMPA - Compares an operand to an address register then sets the condition code flags.  
 - CMPI - Compares a real number to an operand then sets the condition flags.  
 - CMPM - Compares contents of two memory locations using post increment addressing mode.  
 - TAS - Test a byte and sets the high order bit.  
 - TST  - Tests an operand - compares it to zero.
 - EXT  - Sign extend a byte or word to word or long respectively.

Program Control Instructions

BCC - branch if the carry bit is clear. (a zero)

BCS - branch if the carry bit is set. (a one)  

BEQ - branch if equal. 

BGE - Branch if greater than or equal. 

BGT - Branch if greater than.  

BHI - Branch if higher than. Used on unsigned numbers. 

BLE - Branch if less than or equal.  

BLS - Branch if lower than or the same. Used on unsigned numbers.  

BLT - Branch if less than. 

BMI - Branch if minus. 

BNE - Branch if not equal. 

BPL - Branch if plus.  

BVC - Branch if the V bit is clear. (no overflow)

BVS - Branch if the V bit is set. (overflow) 

BRA - Always branch. 

 - DBcc - Decrement then branch if condition is met.  
 - Scc - Set if condition is met.   
 - BSR - Branch to subroutine.   
 - JSR - Jump to subroutine.   
 - RTS - Return from subroutine.   
 - JMP - Jump to an absolute memory location.  
 - RTR - Restores the program counter and condition codes from the stack.   

Logical Operation Instructions

 - AND - Does  AND operation with the operands.   
 - ANDI - Does AND operation with a real number and an operand.   
 - OR - Does OR operation with the operands.
 - ORI - Does OR with a real  number and an operand.   
 - EOR -  Does Exclusive OR with two operands.  
 - EORI - Does Exclusive OR with operand and a real number.
 - NOT  - Inverts an operand.        

Data Movement Instructions

 - EXG - Exchange contents of two registers. 
 - LEA - Load Effective Address. Calculate a memory address and store it in an address register.   
 - LINK - Allocates a stack frame.   
 - MOVE - Move source operand into destination operand.  
 - MOVEM - Transfers multiple register to and from memory.  
 - MOVEP - Transfers data to and from an eight bit peripheral.  
 - MOVEQ - Loads a data register with a number in the range of +- 128.  
 - PEA - Same as LEA, but pushes the address onto the stack.  
 - SWAP - Swaps the words of a data register. The high word becomes the low and the low the high.  
 - UNLK - Unallocates a stack frame.        

Shifting and Rotating Instructions

 - ASL and ASR - Arithmetic shift left or right.   
 - LSL and LSR - Logical shift left or right.    
 - ROL and ROR - Rotate left or right.  
 - ROXL and ROXR - Rotate with the carry bit left or right.     

Bit Manipulating Instructions

 - BTST - tests a single bit.   
 - BSET - set a single bit.   
 - BCLR - clear a single bit.   
 - BCHG - change a single bit.    

System Control instructions

 - MOVE USP - Move an operand to user stack pointer.   
 - RESET - Reset external peripherals.    
 - RTE - Return from an exception.  
 - STOP - Stop processing until an exception occurs.   
 - TCHK - Check an operand against boundaries - used to prevent serious software errors.  
 - TRAP - 16 instructions that provide a method for user program to call a supervisor mode program.

ProZaq